package co.edu.uniandes.ecos.itera.tsp.mundo;

import co.edu.uniandes.ecos.itera.tsp.anotaciones.Avance;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.Loc;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.LogT;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.Tiempos;
import co.edu.uniandes.ecos.itera.tsp.anotaciones.LogD;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Representa un Proyecto del sistema
 */
@Avance(taskId=4, termino='S')
@Tiempos({
	@LogT(date="2011-03-13", min=10, taskId=4),
	@LogT(date="2011-03-13", min=3, taskId=99), // se quito el Plan de Producto y el Plan de calidad porque hacen parte de cada ciclo, y no de todo el proyecto
	@LogT(date="2011-03-13", min=30, taskId=4), // Se hizo prueba local de que todo funcionara con Proyecto y ProyectoDAL
	@LogT(date="2011-03-13", min=5, taskId=111)
})
@LogD(etapaInyectada = Etapa.DESARROLLO, idDefecto=1, taskId=4) // Se asigno el tiempo de desarrollo a una fase miscelaneus que no es, sino a la tarea 4
public class Proyecto implements Serializable
{
	/**
	 * Identifica como Unico a este objeto
	 */
	private static final long serialVersionUID = 8994657889643482012L;

	/**
	 * Nombre del proyecto
	 */
	private String nombreProyecto;


	/**
	 * Listado de los Ciclos a trabajar en este Proyecto
	 */
	private List<Ciclo> ciclos;
	
	/**
	 * Listado de los Roles inscritos en este Proyecto
	 */
	private List<Rol> roles;
	

	/**
	 * Consutrctor por Defecto
	 */
	public Proyecto()
	{
		this.ciclos = new ArrayList<Ciclo>();
		this.roles = new ArrayList<Rol>();
		this.nombreProyecto = new String();
	}
	
	/**
	 * Lista los Ciclos de este proyecto
	 * @return
	 */
	@Loc(size=1, taskId=4)
	public List<Ciclo> listarCiclos()
	{
		return this.ciclos;
	}
	
	/**
	 * Agrega un Ciclo al listado de Ciclos de este Proyecto
	 * @param ciclo
	 */
	@Loc(size=1, taskId=4)
	public void agregarCiclo(Ciclo ciclo)
	{
		this.ciclos.add(ciclo);
	}
	
	/**
	 * Lista los Roles de este Proyecto
	 * @return
	 */
	@Loc(size=1, taskId=4)
	public List<Rol> listarRoles()
	{
		return this.roles;
	}
	
	/**
	 * Agrega un rol al listado de roles de este Proyecto
	 * @param rol
	 */
	@Loc(size=1, taskId=4)
	public void agregarRol(Rol rol)
	{
		this.roles.add(rol);
	}
	
	/**
	 * @return the nombreProyecto
	 */
	@Loc(size=1, taskId=111)
	public String getNombreProyecto() {
		return nombreProyecto;
	}

	/**
	 * @param nombreProyecto the nombreProyecto to set
	 */
	@Loc(size=1, taskId=111)
	public void setNombreProyecto(String nombreProyecto) {
		this.nombreProyecto = nombreProyecto;
	}

	@Override
	public String toString()
	{
		return String.format("%s", this.nombreProyecto);
	}
		
}
